Amazon AppFlowでSalesforceからRedshiftへの連携を試してみた
こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。
先日、連携サービスの「Amazon AppFlow」のS3からSnowflakeへの連携を触ってみましたが、今回はSalesforceからRedshiftへの連携を試してみました!
連携元:Salesforceのデータ確認
まずは、連携元としたいSalesforce側のデータです。今回は「取引先(Account)」を連携したいと思います。
このうちの、一部のデータを連携元データとして利用したいと思います。開発者コンソールで見ると以下のようなデータです。
SELECT Id , Name , BillingState , Phone FROM Account ORDER BY Id
連携先:Redshiftの事前準備
Redshift側の下準備として、データを格納するテーブルを作成しておきます。
CREATE TABLE public.account( id VARCHAR, name VARCHAR, billing_state VARCHAR, phone VARCHAR );
また下記ドキュメントにある通り、AppFlowが利用するS3バケットを準備し、バケットにアクセス可能なIAMロールを作成してRedshiftのクラスタへアタッチしておく必要があります。
今回S3側はfoobar
というバケットを利用するものとして、以下のようなポリシーを持つIAMロールを作成し、Redshiftクラスタへアタッチしています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::foobar/*", "arn:aws:s3:::foobar" ] } ] }
その他、クラスタは「パブリックアクセス可能」として、セキュリティグループでAppFlowからアクセス可能とする必要があります。
今回は検証のために一時的にセキュリティグループでアクセス元IPの制限を全て解放して利用しましたが、ドキュメントを見る限り、現状では下記のドキュメントを参考にしてアクセスをし得るIPアドレスに限定して解放すると良さそうです。
AppFlowでフローを作成する
準備ができたら、早速フローを作成していきます。「フローを作成」ボタンをクリックして、開始します。
手順1:フローの詳細を指定
「フロー名」を指定し、今回は他はそのままにして次に進みます。
手順2:フローを設定
「送信元」と「送信先」の設定を行います。
まずは「送信元」の設定として「Salesforce」を選択し認証設定を行います。
連携データとしては「Salesforce オブジェクト」の「取引先」とします。
次に「送信先」の設定です。「Redshift」を選択し「新規接続を作成」を選びます。
「S3バケット」と「バケットプレフィックス」は、事前に準備したS3バケットとパスを指定します。「IAMロール」も同じく事前準備したものを指定しています。
なお、ロールのプルダウンリストですが、2020/05/11現在では表示できる数に上限があり、大量にロールがある場合には選択できないロールがありました。この場合、IAMロール名を工夫することで表示させることができます。今回はロール名の先頭に00_
というプレフィックスを付けることで対応しました。
接続ができたら、送信先のスキーマとテーブルを指定して、他はデフォルトのままで次にすすみます。
手順3:データフィールドをマッピング
ここではSalesforceのオブジェクトのカラムを、Redshiftテーブルのカラムにどのようにマッピングするかを指定します。今回は手動マッピングを行いました。
「すべてのフィールドを直接マッピングする」を選択して、ダイアログ内でマッピングを指定します。
マッピングは準備したRedshift側のテーブルのカラムへそのままマッピングしています。
うまくマッピングが出来たら、他はそのままにして次にすすみます。
手順4:フィルターを追加
今回は設定しません。次にすすみましょう。
手順5:確認して作成
内容を確認して、問題なければ画面一番右下の「フローを作成」をクリックして完了です!
いざ、実行!
作成したフローを開いて「フローを実行」をクリックします。実行が開始され…
正常に終わりました!
Redshift側で確認します。
SELECT id , name , billing_state , phone FROM public.account ORDER BY id ;
id name billing_state phone 0012v00002f3NRyAAM Edge Communications TX (512) 757-6000 0012v00002f3NRzAAM Burlington Textiles Corp of America NC (336) 222-7000 0012v00002f3NS0AAM Pyramid Construction Inc. NULL (014) 427-4427 0012v00002f3NS1AAM Dickenson plc KS (785) 241-6200 0012v00002f3NS2AAM Grand Hotels & Resorts Ltd IL (312) 596-1000 0012v00002f3NS3AAM United Oil & Gas Corp. NY (212) 842-5500 0012v00002f3NS4AAM Express Logistics and Transport OR (503) 421-7800 0012v00002f3NS5AAM University of Arizona AZ (520) 773-9050 0012v00002f3NS6AAM United Oil & Gas, UK UK +44 191 4956203 0012v00002f3NS7AAM United Oil & Gas, Singapore Singapore (650) 450-8810 0012v00002f3NS8AAM GenePoint CA (650) 867-3450 0012v00002f3NS9AAM sForce CA (415) 901-7000
無事に連携されてますね!
なお、S3バケットの中身も見てみましたが、こちらは空でした。
まとめ
以上、Amazon AppFlowのSalesforceからRedshiftへの連携のご紹介でした。
どなたかのお役に立てば幸いです。それでは!